perm filename POTRED[AL,HE] blob sn#116830 filedate 1977-02-21 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00004 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	TITLE POTRED
C00007 00003	"GETAD" - SAMPLES A/D IN SPACEWAR MODE
C00010 00004	INDICATE A/D ERROR:  1=136 CONFLICTS, 2=MISSED DATA, 3=A/D HUNG
C00013 ENDMK
C⊗;
TITLE POTRED
INTERNAL POTRED

;PROGRAM TO SAMPLE THE FOUR POTS IN THE BOX BELOW THE ARM TABLE.
;A SAIL CALL TO THIS PROCEDURE MUST BE IN THE FOLLOWING FORM-
;
;		POTRED(INTEGER ARRAY POTS[1:4]);
;

;DEFINITIONS

P←17		;ADDRESS STACK
AD←424		;A TO D ADDRESS
D136←204	;136 ADDRESS
RATE←0 		;SPACEWAR EXECUTION INTERVAL

;COMMAND INPUT SECTION

POTRED: MOVEM   16,HOLD+16	;SAVE ALL THE REGISTERS
	HRRZI	16,HOLD
	BLT	16,HOLD+15
	MOVE 	1,-1(P)		;GET THE ADDR. OF THE ARGUMENT
	MOVEM	1,DPT		;SAVE POINTER
	SETZM	ERR     	;RESET A/D ERROR FLAG                 
	SETZM   LFT		;RESET DONE FLAG
 	MOVE	[200000+RATE,,GETAD]	;PDP6 SPACEWAR MODE              
 	SPCWGO	  		;TURN ON SPCWR MODE
	SKIPN	LFT		;CHECK FOR SAMPLING DONE
	JRST	.-1		;NO GO CHECK AGAIN
	SPCWAR	636367		;TERMINATE SPACEWAR MODE
	SUB	P,[2(2)]	;INDICATE ARGUMENTS POPPED OFF STACK
	SKIPE	ERR		;CHECK A/D ERROR FLAGS
	JRST	BADAD
	HRLZI   HOLD		;RESTORE REGISTERS
	BLT	15
	MOVE	16,HOLD+16
	JRST    @2(P)		;RETURN

;"GETAD" - SAMPLES A/D IN SPACEWAR MODE
;
GETAD:	SKIPE	LFT		;CHECK FOR ALL SAMPLES COLLECTED
	DISMIS			;NO MORE, EXIT
	MOVE	10,DPT		;GET DATA POINTER
        MOVEI	2,4		;SET LOOP TO READ FOUR POTS
	MOVEI	5,120030	;FIRST READ FROM POT AT ADDR 12
ADLP:	CONI	D136,1	     	;CHECK FOR CONFLICTS
	ANDI 	1,7   	
        JUMPN	1,[     MOVEI   3,1	;SET ERR=1 AND EXIT
 		   ER1: MOVEM   3,ERR
		        SETZM   LFT     ;TERMINATE SAMPLING LOOP
			DISMIS        ]
	MOVEI	4,8		;SET MISSED DATA COUNT
TURNON:	CONO	D136,4250	;TURNON THE 136
	CONO	AD,@5		;TURN ON THE A/D, CHANNEL IN REG 5
	MOVEI	3,200		;SET DEVICE HUNG COUNT
	CONSO	D136,1000	;WAIT FOR 136 DONE
	SOJGE	3,.-1		;COUNT DOWN WHILE WAITING
	JUMPL	3,[MOVEI   3,3  ;EXIT IF A/D HUNG, SET FLAG
		   JRST    ER1]
	CONSZ	D136,10000	;CHECK FOR MISSED DATA
	JRST	[  CONO    AD,4000	;TURN OFF THE A/D
		   SOJG    4,TURNON	;TRY AGAIN?
		   MOVEI   3,2		;NO,SET FLAGS AND EXIT
		   JRST    ER1        ]
	DATAI	D136,6		;READ A POT
	CONO	AD,4000		;TURN OFF THE A/D
	ADDI	5,10000		;POINT TO NEXT POT
	LSHC	6,-14		;GET THE THIRD READING
	ASH	7,-30
	MOVE    11,7   		;SAVE THE VALUE
	LSHC	6,-14		;GET THE SECOND READING
	ASH	7,-30
	ADD	7,11  		;AVERAGE THE VALUES
	ASH	7,-1
	MOVEM	7,(10)		;RETURN THE VALUE
	AOJ     10,		;INCREMENT ARRAY POINTER
	SOJN	2,ADLP		;CHECK FOR MORE POTS TO READ
	AOS 	LFT		;DECREMENT SAMPLE COUNTER
	DISMIS
;INDICATE A/D ERROR:  1=136 CONFLICTS, 2=MISSED DATA, 3=A/D HUNG

BADAD:	MOVE	1,ERR		;GET FLAGS
	LSH	1,1		;POSITION FOR OUTPUT
	ORM	1,COM4+2	;OR TO OUTPUT STRING
	OUTSTR	COM4		;TYPE OUT MESSAGE
	JRST	@2(P)

;LOCAL STORAGE AREA

DPT:	0
HOLD:	BLOCK   20
LFT:	0
ERR:  	0
COM4:	ASCIZ/
A-D ERROR = 0/


END